{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Pima Indians Diabetes Data Set数据探索\n",
    "\n",
    "数据说明：\n",
    "Pima Indians Diabetes Data Set（皮马印第安人糖尿病数据集） 根据现有的医疗信息预测5年内皮马印第安人糖尿病发作的概率。   \n",
    "\n",
    "数据集共9个字段: \n",
    "0列为怀孕次数；\n",
    "1列为口服葡萄糖耐量试验中2小时后的血浆葡萄糖浓度；\n",
    "2列为舒张压（单位:mm Hg）\n",
    "3列为三头肌皮褶厚度（单位：mm）\n",
    "4列为餐后血清胰岛素（单位:mm）\n",
    "5列为体重指数（体重（公斤）/ 身高（米）^2）\n",
    "6列为糖尿病家系作用\n",
    "7列为年龄\n",
    "8列为分类变量（0或1）\n",
    "\n",
    "数据链接：https://archive.ics.uci.edu/ml/datasets/Pima+Indians+Diabetes"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "import必要的工具包，用于文件读取／特征编码"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "数据文件路径和文件名"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": false,
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>pregnants</th>\n",
       "      <th>Plasma_glucose_concentration</th>\n",
       "      <th>blood_pressure</th>\n",
       "      <th>Triceps_skin_fold_thickness</th>\n",
       "      <th>serum_insulin</th>\n",
       "      <th>BMI</th>\n",
       "      <th>Diabetes_pedigree_function</th>\n",
       "      <th>Age</th>\n",
       "      <th>Target</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>6</td>\n",
       "      <td>148</td>\n",
       "      <td>72</td>\n",
       "      <td>35</td>\n",
       "      <td>0</td>\n",
       "      <td>33.6</td>\n",
       "      <td>0.627</td>\n",
       "      <td>50</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>85</td>\n",
       "      <td>66</td>\n",
       "      <td>29</td>\n",
       "      <td>0</td>\n",
       "      <td>26.6</td>\n",
       "      <td>0.351</td>\n",
       "      <td>31</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>8</td>\n",
       "      <td>183</td>\n",
       "      <td>64</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>23.3</td>\n",
       "      <td>0.672</td>\n",
       "      <td>32</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>89</td>\n",
       "      <td>66</td>\n",
       "      <td>23</td>\n",
       "      <td>94</td>\n",
       "      <td>28.1</td>\n",
       "      <td>0.167</td>\n",
       "      <td>21</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0</td>\n",
       "      <td>137</td>\n",
       "      <td>40</td>\n",
       "      <td>35</td>\n",
       "      <td>168</td>\n",
       "      <td>43.1</td>\n",
       "      <td>2.288</td>\n",
       "      <td>33</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   pregnants  Plasma_glucose_concentration  blood_pressure  \\\n",
       "0          6                           148              72   \n",
       "1          1                            85              66   \n",
       "2          8                           183              64   \n",
       "3          1                            89              66   \n",
       "4          0                           137              40   \n",
       "\n",
       "   Triceps_skin_fold_thickness  serum_insulin   BMI  \\\n",
       "0                           35              0  33.6   \n",
       "1                           29              0  26.6   \n",
       "2                            0              0  23.3   \n",
       "3                           23             94  28.1   \n",
       "4                           35            168  43.1   \n",
       "\n",
       "   Diabetes_pedigree_function  Age  Target  \n",
       "0                       0.627   50       1  \n",
       "1                       0.351   31       0  \n",
       "2                       0.672   32       1  \n",
       "3                       0.167   21       0  \n",
       "4                       2.288   33       1  "
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#input data\n",
    "train = pd.read_csv(\"pima-indians-diabetes.csv\")\n",
    "train.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": true,
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "#train.info()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "粗看数据集没有缺失值\n",
    "但该数据集已知存在缺失值，某些列中存在的缺失值被标记为0。通过这些列中指标的定义和相应领域的常识可以证实上述观点，譬如体重指数和血压两列中的0作为指标数值来说是无意义的。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>pregnants</th>\n",
       "      <th>Plasma_glucose_concentration</th>\n",
       "      <th>blood_pressure</th>\n",
       "      <th>Triceps_skin_fold_thickness</th>\n",
       "      <th>serum_insulin</th>\n",
       "      <th>BMI</th>\n",
       "      <th>Diabetes_pedigree_function</th>\n",
       "      <th>Age</th>\n",
       "      <th>Target</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>768.000000</td>\n",
       "      <td>768.000000</td>\n",
       "      <td>768.000000</td>\n",
       "      <td>768.000000</td>\n",
       "      <td>768.000000</td>\n",
       "      <td>768.000000</td>\n",
       "      <td>768.000000</td>\n",
       "      <td>768.000000</td>\n",
       "      <td>768.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>3.845052</td>\n",
       "      <td>120.894531</td>\n",
       "      <td>69.105469</td>\n",
       "      <td>20.536458</td>\n",
       "      <td>79.799479</td>\n",
       "      <td>31.992578</td>\n",
       "      <td>0.471876</td>\n",
       "      <td>33.240885</td>\n",
       "      <td>0.348958</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>3.369578</td>\n",
       "      <td>31.972618</td>\n",
       "      <td>19.355807</td>\n",
       "      <td>15.952218</td>\n",
       "      <td>115.244002</td>\n",
       "      <td>7.884160</td>\n",
       "      <td>0.331329</td>\n",
       "      <td>11.760232</td>\n",
       "      <td>0.476951</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.078000</td>\n",
       "      <td>21.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>99.000000</td>\n",
       "      <td>62.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>27.300000</td>\n",
       "      <td>0.243750</td>\n",
       "      <td>24.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>3.000000</td>\n",
       "      <td>117.000000</td>\n",
       "      <td>72.000000</td>\n",
       "      <td>23.000000</td>\n",
       "      <td>30.500000</td>\n",
       "      <td>32.000000</td>\n",
       "      <td>0.372500</td>\n",
       "      <td>29.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>6.000000</td>\n",
       "      <td>140.250000</td>\n",
       "      <td>80.000000</td>\n",
       "      <td>32.000000</td>\n",
       "      <td>127.250000</td>\n",
       "      <td>36.600000</td>\n",
       "      <td>0.626250</td>\n",
       "      <td>41.000000</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>17.000000</td>\n",
       "      <td>199.000000</td>\n",
       "      <td>122.000000</td>\n",
       "      <td>99.000000</td>\n",
       "      <td>846.000000</td>\n",
       "      <td>67.100000</td>\n",
       "      <td>2.420000</td>\n",
       "      <td>81.000000</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "        pregnants  Plasma_glucose_concentration  blood_pressure  \\\n",
       "count  768.000000                    768.000000      768.000000   \n",
       "mean     3.845052                    120.894531       69.105469   \n",
       "std      3.369578                     31.972618       19.355807   \n",
       "min      0.000000                      0.000000        0.000000   \n",
       "25%      1.000000                     99.000000       62.000000   \n",
       "50%      3.000000                    117.000000       72.000000   \n",
       "75%      6.000000                    140.250000       80.000000   \n",
       "max     17.000000                    199.000000      122.000000   \n",
       "\n",
       "       Triceps_skin_fold_thickness  serum_insulin         BMI  \\\n",
       "count                   768.000000     768.000000  768.000000   \n",
       "mean                     20.536458      79.799479   31.992578   \n",
       "std                      15.952218     115.244002    7.884160   \n",
       "min                       0.000000       0.000000    0.000000   \n",
       "25%                       0.000000       0.000000   27.300000   \n",
       "50%                      23.000000      30.500000   32.000000   \n",
       "75%                      32.000000     127.250000   36.600000   \n",
       "max                      99.000000     846.000000   67.100000   \n",
       "\n",
       "       Diabetes_pedigree_function         Age      Target  \n",
       "count                  768.000000  768.000000  768.000000  \n",
       "mean                     0.471876   33.240885    0.348958  \n",
       "std                      0.331329   11.760232    0.476951  \n",
       "min                      0.078000   21.000000    0.000000  \n",
       "25%                      0.243750   24.000000    0.000000  \n",
       "50%                      0.372500   29.000000    0.000000  \n",
       "75%                      0.626250   41.000000    1.000000  \n",
       "max                      2.420000   81.000000    1.000000  "
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#查看数值型特征的基本统计量\n",
    "train.describe()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "从结果中我们可以看到很多列的最小值为0。而在一些特定列代表的变量中，0值并没有意义，这就表名该值无效或为缺失值。\n",
    "\n",
    "具体来说，下列变量的最小值为0时数据无意义：\n",
    "1、血浆葡萄糖浓度\n",
    "2、舒张压\n",
    "3、肱三头肌皮褶厚度\n",
    "4、餐后血清胰岛素\n",
    "5、体重指数\n",
    "\n",
    "在Pandas的DataFrame中，通过replace()函数可以很方便的将我们感兴趣的数据子集的值标记为NaN。\n",
    "\n",
    "标记完缺失值之后，可以利用isnull()函数将数据集中所有的NaN值标记为True，然后就可以得到每一列中缺失值的数量了。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": false,
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "pregnants                         0\n",
      "Plasma_glucose_concentration      5\n",
      "blood_pressure                   35\n",
      "Triceps_skin_fold_thickness     227\n",
      "serum_insulin                   374\n",
      "BMI                              11\n",
      "Diabetes_pedigree_function        0\n",
      "Age                               0\n",
      "Target                            0\n",
      "dtype: int64\n"
     ]
    }
   ],
   "source": [
    "NaN_col_names = ['Plasma_glucose_concentration','blood_pressure','Triceps_skin_fold_thickness','serum_insulin','BMI']\n",
    "train[NaN_col_names] = train[NaN_col_names].replace(0, np.NaN)\n",
    "print(train.isnull().sum())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 对缺失值较多的特征，新增一个特征，表示这个特征是否缺失"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": false,
    "scrolled": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Triceps_skin_fold_thickness</th>\n",
       "      <th>Triceps_skin_fold_thickness_Missing</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>35.0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>29.0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>NaN</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>23.0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>35.0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>NaN</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>32.0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>NaN</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>45.0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>NaN</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Triceps_skin_fold_thickness  Triceps_skin_fold_thickness_Missing\n",
       "0                         35.0                                    0\n",
       "1                         29.0                                    0\n",
       "2                          NaN                                    1\n",
       "3                         23.0                                    0\n",
       "4                         35.0                                    0\n",
       "5                          NaN                                    1\n",
       "6                         32.0                                    0\n",
       "7                          NaN                                    1\n",
       "8                         45.0                                    0\n",
       "9                          NaN                                    1"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#缺失值比较多，干脆就开一个新的字段，表明是缺失值还是不是缺失值\n",
    "train['Triceps_skin_fold_thickness_Missing'] = train['Triceps_skin_fold_thickness'].apply(lambda x: 1 if pd.isnull(x) else 0)\n",
    "train[['Triceps_skin_fold_thickness','Triceps_skin_fold_thickness_Missing']].head(10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": false,
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x25e03e1d828>"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAhoAAAF5CAYAAADZMYNPAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAAPYQAAD2EBqD+naQAAIABJREFUeJzt3Xt8XWWd7/HPr9A2pNAWCC1lNIIUagWBabVSGC4ODCA6\nXg46krGg4A0FxJzzUuTIKEMdOaDSDg4ozuHITaMMTpURBJSrQKXaAnIJRbAQbi3E1hZo0+tz/lgr\nmd1Nbk2ysneSz/v12q9mP+tZa//23kn3dz/rWWtFSglJkqQijKp0AZIkafgyaEiSpMIYNCRJUmEM\nGpIkqTAGDUmSVBiDhiRJKoxBQ5IkFcagIUmSCmPQkCRJhTFoSJKkwlRd0IiIL0fEloi4uKz9/Ih4\nISLWRsSvImJq2fKxEXFpRLRGxCsRcX1ETBrc6iVJUqmqChoR8Q7g08BDZe1nA2fky2YBrwG3RMSY\nkm7zgfcAJwCHA3sAPx2EsiVJUheqJmhExI7AtcAngb+ULT4LmJtS+kVK6RHgZLIg8YF83fHAqUBj\nSumulNIDwCnAoRExa7CegyRJ2lrVBA3gUuC/Ukq3lzZGxF7A7sBt7W0ppTXA/cDsvOntwPZlfZYC\nLSV9JEnSINu+0gUARMSJwEFkgaHc7kACVpS1r8iXAUwGNuQBpKs+5Y+5K3As8DTQ1qfCJUkamWqA\nPYFbUkp/7q5jxYNGRLyBbH7F0SmljYP40McCPxzEx5Mkabj5KPCj7jpUPGgAM4HdgCUREXnbdsDh\nEXEG8BYgyEYtSkc1JgMP5D8vB8ZExPiyUY3J+bLOPA1w7bXXMn369IF4HqqwxsZG5s2bV+kyJHXB\nv9Hho7m5mTlz5kD+WdqdaggavwbeVtZ2JdAM/J+U0p8iYjlwFPAH6Jj8+U6yeR0Ai4FNeZ8FeZ9p\nQD2wsIvHbQOYPn06M2bMGKjnogqaMGGC76VUxfwbHZZ6nHpQ8aCRUnoNeKy0LSJeA/6cUmrOm+YD\n50bEk2TpaS7wHPDzfBtrIuIK4OKIWAW8AlwC3JtSWjQoT0SSJL1OxYNGF9JWd1K6KCJqgcuBicBv\ngHenlDaUdGsENgPXA2OBm4HTB6dcSZLUmaoMGimlv+2k7TzgvG7WWQ+cmd8kSVIVqKbzaEj90tDQ\nUOkSJHXDv9GRyaChYcP/xKTq5t/oyFSVu04kSRoMLS0ttLa2VrqMqlRXV0d9fX2/t2PQkCSNSC0t\nLUyfPp21a9dWupSqVFtbS3Nzc7/DhkFDkjQitba2snbtWk/c2In2E3K1trYaNCRJ6g9P3FgsJ4NK\nkqTCGDQkSVJhDBqSJKkwBg1JklQYg4YkSSqMQUOSpG0watQotttuO0aNGvW623bbbcf5559f6RI5\n55xzmD17dqXLADy8VZKkbbJ8+fKOn3/84x/zta99jSeeeIKUsguP77jjjn3a7saNGxk9evSA1AgQ\nEQO2rf5wREOSpG0wadKkjtuECROICHbbbbeOttraWjZs2MApp5zCnnvuSW1tLdOnT+e73/3uVttp\naGigoaGB8847jylTpnDQQQcB8Pzzz3Pssceyww47sO+++/Kzn/2MKVOm8P3vf79j3ZUrV/Lxj3+c\n3XbbjYkTJ3LMMcfw2GOPAXD55Zdz4YUXcv/993eMslx33XWD9wKVcURDkqQBtmnTJvbee2/OOuss\ndt55Z+6++25OO+003vjGN/Le9763o9+NN97ITjvtxB133NHRduKJJ7Jx40buvfdeAL7whS+wevXq\nrbb/wQ9+kMmTJ/PrX/+acePG8Z3vfIejjz6aJ554go997GM8+uijLFy4kJtuuomUEhMnThycJ94J\ng4YkSQOstraWc889t+P+SSedxN1338111123VdDYZZdd+N73vseoUdkOhoceeoh7772XRx99tOO0\n6N/97nd529ve1rHOr3/9a5qbm7n99tvZbrvtAJg/fz4LFizgZz/7GXPmzGHcuHGMHj2a3XbbbTCe\nbrcMGpIkFWD+/Plcc801tLS00NbWxoYNG143QfPAAw/sCBkAS5cuZdy4cVtde2W//fZjhx126Lj/\nhz/8gZUrV75ulKKtrY2nnnqqoGfTdwYNSZIG2JVXXsm5557Lv/7rv/L2t7+dnXbaiblz57J06dKt\n+o0bN26bt/3qq6+y1157ceutt3ZMQG23884796vuIhg0JEkaYPfddx/vete7+MQnPtHR9uSTT/a4\n3rRp01i7di3Nzc0doxqPPvoo69at6+gzY8YMLrjgAmpqapgyZUqn2xkzZgybN2/u57MYGB51IknS\nANtnn31YuHAht99+O3/84x/58pe/zMMPP9zjegceeCCHHnoop556KosXL+b3v/89p59+OjU1NR2H\nqx5//PEcdNBBvP/97+e2227j6aef5p577uHLX/4yjzzyCAB77rknf/zjH3nkkUf485//zMaNGwt9\n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\nQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x25e03dc0ef0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sns\n",
    "#color = sns.color_palette()\n",
    "\n",
    "%matplotlib inline\n",
    "sns.countplot(x=\"Triceps_skin_fold_thickness_Missing\", hue=\"Target\",data=train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x25e041cdef0>"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAhoAAAF5CAYAAADZMYNPAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAAPYQAAD2EBqD+naQAAIABJREFUeJzt3X18XVWd7/HPr9A2TaUtGFqKYwQp1CoDtcVKZXhw4AIi\nV+WFM5KRZ8VhRMCMd0RG5oLga5jiSOsDIs5lKILGqWjVEeQZRArSsQWBEsrDFAKFFkKxBdr0ga77\nx97JnB6SNk2yc06Sz/v1Oi961l5nnd8+bTjfrL323pFSQpIkqQjDKl2AJEkavAwakiSpMAYNSZJU\nGIOGJEkqjEFDkiQVxqAhSZIKY9CQJEmFMWhIkqTCGDQkSVJhDBqSJKkwFQ8aEXFmRPwxIlbnj/si\n4uiyPhdHxAsRsTYibouISWXbR0bEFRHRGhGvRcQNETG+f/dEkiSVq3jQAJ4DzgOmAdOBO4FfRsQU\ngIg4D/gC8DlgBvAGcEtEjCgZYw7wUeB44BBgd+Bn/bUDkiSpc1GNN1WLiFeA/5NSuiYiXgC+kVKa\nnW8bA6wETkkpzcufvwyckFKan/eZDDQDB6aUFlZmLyRJUjXMaHSIiGERcQJQC9wXEXsCuwF3tPdJ\nKa0BHgBm5k0HADuW9VkKtJT0kSRJFbBjpQsAiIh9gfuBGuA14LiU0tKImAkkshmMUivJAgjABGBD\nHkC66tPZe74dOAp4Bmjr7T5IkjSE1AB7ALeklF7ZWseqCBrA48D+wFjgk8API+KQgt/zKOBHBb+H\nJEmD2aeBH2+tQ1UEjZTSJuC/86cPRsQM4FzgMiDIZi1KZzUmAA/mf14BjIiIMWWzGhPybV15BuD6\n669nypQpvd4HVV5jYyOzZ8+udBmSuuDP6ODR3NzMiSeeCPl36dZURdDoxDBgZEppWUSsAA4HHoaO\nxaAfBK7I+y4CNuV9SheD1pMdjulKG8CUKVOYNm1aEfugfjZ27Fj/LqUq5s/ooLTNpQcVDxoR8c/A\nb8gWb+5ENg1zKHBk3mUOcEFEPEWWnC4Bngd+Cdni0Ii4Grg8Il4lW+PxbWCBZ5xIklRZFQ8awHjg\nWmAisJps5uLIlNKdACmlyyKiFrgKGAf8DvhISmlDyRiNwJvADcBI4GbgrH7bA0mS1KmKB42U0me7\n0eci4KKtbF8PnJ0/JElSlaiq62hIvdHQ0FDpEiRthT+jQ5NBQ4OG/xOTqps/o0NTxQ+dSJJUKS0t\nLbS2tla6jKpUV1dHfX19r8cxaEiShqSWlhamTJnC2rVrK11KVaqtraW5ubnXYcOgIUkaklpbW1m7\ndq0XbuxE+wW5WltbDRqSJPWGF24slotBJUlSYQwakiSpMAYNSZJUGIOGJEkqjEFDkiQVxqAhSdJ2\nGDZsGDvssAPDhg17y2OHHXbg4osvrnSJnH/++cycObPSZQCe3ipJ0nZZsWJFx59/8pOfcOGFF/LE\nE0+QUgLgbW97W4/G3bhxI8OHD++TGgEios/G6g1nNCRJ2g7jx4/veIwdO5aIYNddd+1oq62tZcOG\nDZx22mnsscce1NbWMmXKFK688sotxmloaKChoYGLLrqIiRMnMnXqVACWL1/OUUcdxahRo9hnn334\nxS9+wcSJE/nBD37Q8dpVq1Zx6qmnsuuuuzJu3DiOPPJIHnvsMQCuuuoqZs2axQMPPNAxyzJv3rz+\n+4DKOKMhSVIf27RpE3vttRfnnnsuO++8M/fccw9nnnkm73znOzn22GM7+t14443stNNO3HXXXR1t\nJ5xwAhs3bmTBggUAfPGLX2T16tVbjH/ccccxYcIEbr/9dkaPHs13vvMdjjjiCJ544glOOeUUlixZ\nwv33389NN91ESolx48b1z453wqAhSVIfq62t5YILLuh4ftJJJ3HPPfcwb968LYLGLrvswve//32G\nDcsOMPzxj39kwYIFLFmypOOy6FdeeSV//ud/3vGa22+/nebmZu6880522GEHAObMmcP8+fP5xS9+\nwYknnsjo0aMZPnw4u+66a3/s7lYZNCRJKsCcOXO47rrraGlpoa2tjQ0bNrxlgeb+++/fETIAli5d\nyujRo7e498r73vc+Ro0a1fH84YcfZtWqVW+ZpWhra+Ppp58uaG96zqAhSVIfmzt3LhdccAHf+ta3\nOOCAA9hpp5245JJLWLp06Rb9Ro8evd1jv/766+y5557ceuutHQtQ2+288869qrsIBg1JkvrYfffd\nx4c//GE+85nPdLQ99dRT23zd5MmTWbt2Lc3NzR2zGkuWLGHdunUdfaZNm8all15KTU0NEydO7HSc\nESNG8Oabb/ZyL/qGZ51IktTH9t57b+6//37uvPNOnnzySb7yla/wyCOPbPN1+++/PwcddBCnn346\nixYt4g9/+ANnnXUWNTU1HaerHnPMMUydOpWPf/zj3HHHHTzzzDPce++9fOUrX+HRRx8FYI899uDJ\n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\nAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x25e041da3c8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#缺失值比较多，干脆就开一个新的字段，表明是缺失值还是不是缺失值\n",
    "train['serum_insulin_Missing'] = train['serum_insulin'].apply(lambda x: 1 if pd.isnull(x) else 0)\n",
    "sns.countplot(x=\"serum_insulin_Missing\", hue=\"Target\",data=train)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "不过特征是否缺失好像和目标也没什么关系"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "train.drop([\"Triceps_skin_fold_thickness_Missing\", \"serum_insulin_Missing\"], axis=1, inplace=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "感觉特征缺失是随机的，将这新增的特征删除，老实用中值填补算了。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "collapsed": false,
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "pregnants                       0\n",
      "Plasma_glucose_concentration    0\n",
      "blood_pressure                  0\n",
      "Triceps_skin_fold_thickness     0\n",
      "serum_insulin                   0\n",
      "BMI                             0\n",
      "Diabetes_pedigree_function      0\n",
      "Age                             0\n",
      "Target                          0\n",
      "dtype: int64\n"
     ]
    }
   ],
   "source": [
    "medians = train.median() \n",
    "train = train.fillna(medians)\n",
    "\n",
    "print(train.isnull().sum())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 数据标准化"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#  get labels\n",
    "y_train = train['Target']   \n",
    "X_train = train.drop([\"Target\"], axis=1)\n",
    "\n",
    "#用于保存特征工程之后的结果\n",
    "feat_names = X_train.columns\n",
    "\n",
    "# 数据标准化\n",
    "from sklearn.preprocessing import StandardScaler\n",
    "\n",
    "# 初始化特征的标准化器\n",
    "ss_X = StandardScaler()\n",
    "\n",
    "# 分别对训练和测试数据的特征进行标准化处理\n",
    "X_train = ss_X.fit_transform(X_train)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 特征处理结果存为文件"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "collapsed": true,
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "#存为csv格式\n",
    "X_train = pd.DataFrame(columns = feat_names, data = X_train)\n",
    "\n",
    "train = pd.concat([X_train, y_train], axis = 1)\n",
    "\n",
    "train.to_csv('FE_pima-indians-diabetes.csv',index = False,header=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>pregnants</th>\n",
       "      <th>Plasma_glucose_concentration</th>\n",
       "      <th>blood_pressure</th>\n",
       "      <th>Triceps_skin_fold_thickness</th>\n",
       "      <th>serum_insulin</th>\n",
       "      <th>BMI</th>\n",
       "      <th>Diabetes_pedigree_function</th>\n",
       "      <th>Age</th>\n",
       "      <th>Target</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.639947</td>\n",
       "      <td>0.866045</td>\n",
       "      <td>-0.031990</td>\n",
       "      <td>0.670643</td>\n",
       "      <td>-0.181541</td>\n",
       "      <td>0.166619</td>\n",
       "      <td>0.468492</td>\n",
       "      <td>1.425995</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>-0.844885</td>\n",
       "      <td>-1.205066</td>\n",
       "      <td>-0.528319</td>\n",
       "      <td>-0.012301</td>\n",
       "      <td>-0.181541</td>\n",
       "      <td>-0.852200</td>\n",
       "      <td>-0.365061</td>\n",
       "      <td>-0.190672</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1.233880</td>\n",
       "      <td>2.016662</td>\n",
       "      <td>-0.693761</td>\n",
       "      <td>-0.012301</td>\n",
       "      <td>-0.181541</td>\n",
       "      <td>-1.332500</td>\n",
       "      <td>0.604397</td>\n",
       "      <td>-0.105584</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>-0.844885</td>\n",
       "      <td>-1.073567</td>\n",
       "      <td>-0.528319</td>\n",
       "      <td>-0.695245</td>\n",
       "      <td>-0.540642</td>\n",
       "      <td>-0.633881</td>\n",
       "      <td>-0.920763</td>\n",
       "      <td>-1.041549</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>-1.141852</td>\n",
       "      <td>0.504422</td>\n",
       "      <td>-2.679076</td>\n",
       "      <td>0.670643</td>\n",
       "      <td>0.316566</td>\n",
       "      <td>1.549303</td>\n",
       "      <td>5.484909</td>\n",
       "      <td>-0.020496</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   pregnants  Plasma_glucose_concentration  blood_pressure  \\\n",
       "0   0.639947                      0.866045       -0.031990   \n",
       "1  -0.844885                     -1.205066       -0.528319   \n",
       "2   1.233880                      2.016662       -0.693761   \n",
       "3  -0.844885                     -1.073567       -0.528319   \n",
       "4  -1.141852                      0.504422       -2.679076   \n",
       "\n",
       "   Triceps_skin_fold_thickness  serum_insulin       BMI  \\\n",
       "0                     0.670643      -0.181541  0.166619   \n",
       "1                    -0.012301      -0.181541 -0.852200   \n",
       "2                    -0.012301      -0.181541 -1.332500   \n",
       "3                    -0.695245      -0.540642 -0.633881   \n",
       "4                     0.670643       0.316566  1.549303   \n",
       "\n",
       "   Diabetes_pedigree_function       Age  Target  \n",
       "0                    0.468492  1.425995       1  \n",
       "1                   -0.365061 -0.190672       0  \n",
       "2                    0.604397 -0.105584       1  \n",
       "3                   -0.920763 -1.041549       0  \n",
       "4                    5.484909 -0.020496       1  "
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "anaconda-cloud": {},
  "kernelspec": {
   "display_name": "Python [conda env:Anaconda3]",
   "language": "python",
   "name": "conda-env-Anaconda3-py"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.5.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
